/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logica;

import controlador.ControladorJPanelAltaPersona;
import dao.GenericDao;
import dao.PersonaDao;
import dao.SeccionDao;
import java.awt.Color;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import modelo.Amigo;
import modelo.Direccion;
import modelo.Persona;
import modelo.Seccion;

/**
 *
 * @author Elias Mendoza
 */
public class ModuloAltaPersona extends gestion implements Runnable {

  ControladorJPanelAltaPersona driver;
  private int tarea;

  public ModuloAltaPersona(ControladorJPanelAltaPersona driver) {
    this.driver = driver;
  }

  public void setTarea(int tarea) {
    this.tarea = tarea;
  }

  //el metodo run del jecutara las tarea que requieren conexion a la base de datos, ya que son las tareas que mas memoria consumen
  @Override
  public void run() {
    try {
      switch (tarea) {
        case 1:
          System.out.println("llenando los cmbox");
          llenaComboSecciones(driver.panel.jComboBoxSeccion);
          break;
        case 2:
          System.out.println("llenando los cmbox amigo");
          llenaComboAmigos(driver.panel.jComboBoxAmigo, (Seccion) driver.panel.jComboBoxSeccion.getSelectedItem());
          break;
        case 3:
          System.out.println("comenzando el registro");
          registrar();
          break;
      }

    } finally {
      return;
    }
  }

  //Metods que gestinan el comportamiento del JPanelAltaAmigo y que son ejcutados en el hilo
  //Metodo que llena el Combo de secciones
  private void llenaComboSecciones(JComboBox comboBox) {
    comboBox.removeAllItems();
    GenericDao operacion = new GenericDao();
    Seccion array[] = operacion.consultaSecciones();
    for (int i = 0; i < array.length; i++) {
      comboBox.addItem(array[i]);
    }
  }

  public void llenaComboAmigos(JComboBox comboBox, Seccion seccion) {
    comboBox.removeAllItems();
    SeccionDao operacion = new SeccionDao();
    Amigo array[] = operacion.consultaAmigos(seccion.getId());
    for (int i = 0; i < array.length; i++) {
      comboBox.addItem(array[i]);
    }
  }

  //metodo que registra un amigo utilizando una instaciona  de AmigoDao()
  private void registrar() {
    JTextField[] campos = {driver.panel.jTextField1Colonia, driver.panel.jTextFieldApMaterno, driver.panel.jTextFieldApPaterno, driver.panel.jTextFieldCalle,
      driver.panel.jTextFieldNombre, driver.panel.jTextFieldNumero};
    if (camposVacios(campos)) {
      System.out.println("los campos estan vacios");
      return;
    }
    Direccion direccion = new Direccion();
    direccion.setCalle(driver.panel.jTextFieldCalle.getText());
    direccion.setColonia(driver.panel.jTextField1Colonia.getText());
    direccion.setNumero(Integer.parseInt(driver.panel.jTextFieldNumero.getText()));
    direccion.setTelefono(driver.panel.jTextFieldTelefono.getText());

    Persona persona = new Persona();
    persona.setApellidoMaterno(driver.panel.jTextFieldApMaterno.getText());
    persona.setApellidoPaterno(driver.panel.jTextFieldApPaterno.getText());
    persona.setClaveElector(driver.panel.jTextFieldClaveElec.getText());
    persona.setSexo(driver.panel.jComboBoxSexo.getSelectedItem().toString());
    persona.setDireccion(direccion);
    persona.setFechaNacimiento(driver.panel.jDateChooserFechaNac.getDate());
    persona.setNombre(driver.panel.jTextFieldNombre.getText());
    persona.setSeccion((Seccion) driver.panel.jComboBoxSeccion.getSelectedItem());
    persona.setAmigo((Amigo) driver.panel.jComboBoxAmigo.getSelectedItem());
//    new AmigoDao().relacionar(seccion, amigo);

    if (new PersonaDao().personaRepetida(persona.getNombre(), persona.getApellidoPaterno(), persona.getApellidoMaterno()) != null) {
      JOptionPane.showMessageDialog(driver.panel, "Fallo el registro, la persona que intenta registrar ya existe", "error al registrar", JOptionPane.ERROR_MESSAGE);
      return;
    }
    if (new PersonaDao().guardarCascada(persona)) {
      JOptionPane.showMessageDialog(driver.panel, "Registro Exitoso", "Registro", JOptionPane.INFORMATION_MESSAGE);
      if(!driver.panel.jCheckBoxRecordarDireccion.isSelected())
        vaciarCampos(campos);
      llenarCampoRegistro(persona, driver.panel.jTextPane1, Color.BLUE);

    } else {
      JOptionPane.showMessageDialog(driver.panel, "Fallo el registro, verificar datos (duplicidad)", "error al registrar", JOptionPane.ERROR_MESSAGE);
      llenarCampoRegistro(persona, driver.panel.jTextPane1, Color.RED);
    }
  }

  public void vaciarCampos() {
    JTextField[] campos = {driver.panel.jTextField1Colonia, driver.panel.jTextFieldApMaterno, driver.panel.jTextFieldApPaterno, driver.panel.jTextFieldCalle,
      driver.panel.jTextFieldNombre, driver.panel.jTextFieldNumero};
    for (int i = 0; i < campos.length; i++) {
      campos[i].setText("");
    }
  }

  public void llenarCampoRegistro(Persona persona, JTextPane paneldatos, Color color) {

    paneldatos.setForeground(color);
    paneldatos.setBackground(color);

    paneldatos.setText(persona.getNombre() + "\n");
    paneldatos.setText(paneldatos.getText() + persona.getApellidoPaterno() + "\n");
    paneldatos.setText(paneldatos.getText() + persona.getApellidoMaterno() + "\n");
    paneldatos.setText(paneldatos.getText() + persona.getClaveElector() + "\n");
    paneldatos.setText(paneldatos.getText() + persona.getSexo() + "\n");
    paneldatos.setText(paneldatos.getText() + persona.getDireccion().getCalle() + "\n");
    paneldatos.setText(paneldatos.getText() + persona.getDireccion().getColonia() + "\n");
    paneldatos.setText(paneldatos.getText() + persona.getDireccion().getNumero() + "\n");
    paneldatos.setText(paneldatos.getText() + persona.getDireccion().getTelefono() + "\n");
    paneldatos.setText(paneldatos.getText() + persona.getAmigo().getFolio() + " " + persona.getAmigo().getNombre() + "\n");
    paneldatos.setText(paneldatos.getText() + persona.getSeccion().getNumero() + "\n");
  }
}
